package com.elguile.laptop.casoDeUso;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;

import com.elguile.laptop.baseDatos.RepositorioVenta;
import static org.junit.Assert.*;

import com.elguile.laptop.entidades.Linea;
import com.elguile.laptop.entidades.Reloj;
import com.elguile.laptop.entidades.RelojFalso;
import com.elguile.laptop.entidades.Venta;
import com.elguile.laptop.errores.ExcepcionDeFechaEnElOrdenEquivocado;

public class ConsultarVentasDeberia {

	private static final String SINCODIGO = "";
	private static final Date AYER = new Date(1000);
	private static final Date HOY = new Date(2000);
	private RepositorioVenta repositorioConDosVentas;

	private ConsultaDeVenta consultaDeVenta;

	@Before
	public void setUp() {
		Venta anteayer = new Venta(1, AYER);
		anteayer.add(new Linea(1, "a", new BigDecimal("4")));
		Venta ventaDeHoy = new Venta(2, HOY);
		ventaDeHoy.add(new Linea(1, "a", new BigDecimal("1")));
		repositorioConDosVentas = new RepositorioVenta(anteayer, ventaDeHoy);
		consultaDeVenta = new ConsultaDeVenta(repositorioConDosVentas);
	}

	@Test
	public void listarVentasEntreFechas() {

		List<Venta> ventas = consultaDeVenta.buscar(SINCODIGO, AYER, HOY);

		Venta primeraObtenida = ventas.get(0);
		Venta segundaObtenida = ventas.get(1);

		assertEquals(ventas.size(), 2);
		assertEquals(primeraObtenida.getCodigoVenta(), (Integer) 1);
		assertEquals(primeraObtenida.getCantidadLineas(), 1);
		assertEquals(primeraObtenida.getFecha(), AYER);
		assertEquals(segundaObtenida.getCodigoVenta(), (Integer) 2);
		assertEquals(segundaObtenida.getCantidadLineas(), 1);
		assertEquals(segundaObtenida.getFecha(), HOY);

	}

	@Test
	public void listarVentasEntreConCodigo() {

		List<Venta> ventas = consultaDeVenta.buscar("1", AYER, HOY);

		Venta primeraObtenida = ventas.get(0);

		assertEquals(ventas.size(), 1);
		assertEquals(primeraObtenida.getCodigoVenta(), (Integer) 1);
		assertEquals(primeraObtenida.getCantidadLineas(), 1);
		assertEquals(primeraObtenida.getFecha(), AYER);

	}

	@Test(expected = ExcepcionDeFechaEnElOrdenEquivocado.class)
	public void lansarExcepcionCuandoLafechaDeInicioEsMayorQueLaDeFin() {

		consultaDeVenta.buscar(SINCODIGO, HOY, AYER);

	}

	@Test
	public void obtnerEltotal() {
		consultaDeVenta.buscar(SINCODIGO, AYER, HOY);
		assertEquals(consultaDeVenta.getTotal(), new BigDecimal("5"));
	}
}
